package main.滑动窗口;

import java.util.HashSet;
import java.util.LinkedHashSet;

/**
 * @author tmh
 * @date 2024/7/10 11:17
 * @description 使用hashSet和滑动窗口秒了
 */
public class T3无重复字符的最长子串 {
    public int lengthOfLongestSubstring(String s) {
        //使用linkedHashset来保留元素的插入顺序
        LinkedHashSet<Character> set = new LinkedHashSet<>();
        //存储最大元素
        int max = 0;
        //定义滑动窗口的左右区间
        int left = 0, right = 0;
        //遍历s
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            //判断这个c在不在set里面,通过使用while,==> abcc，当遍历到第四个c的时候，就要把前面三个abc给移除出去
            while (set.contains(c)) {
                //如果c在这个set里面，那么就操作left，移动左区间的边界
                set.remove(s.charAt(left));
                left++;
            }
            //如果元素不在set里面，就把c加入set
            set.add(c);
            int temp = right - left + 1;
            max = Math.max(max, temp);
            //right往右面移动
            right++;
        }
        return max;
    }

}
